package homework.level01model04.homework04;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class UserMessageServer {
    /*
    * 使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
  服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456"，
  * 若 是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，
  * 客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
  其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
  其中 User 类的特征有：用户名、密码(字符串类型)。
  如： UserMessage tum = new UserMessage("check", new User("admin", "123456"));
    *
    *
    * */
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket accept = null;
        ObjectInputStream objectInputStream =null;
        ObjectOutputStream objectOutputStream = null;
        try {
            //serversocket 对象
            serverSocket = new ServerSocket(8888);


            //等待请求
            System.out.println("等待客户端连接请求");
            accept = serverSocket.accept();
            System.out.println("连接成功");
            //io传输 接收对象
             objectInputStream = new ObjectInputStream(accept.getInputStream());
            Object o = objectInputStream.readObject();
            System.out.println("接收对象成功");
            UserMessage o1 = (UserMessage) o;
            User user = o1.getUser();
            if ("admin".equals(user.getName())&&"123456".equals(user.getPassword())){
                o1.setType("success");
            }else{
                o1.setType("fail");
            }
            //System.out.println(o1.getType());
             objectOutputStream = new ObjectOutputStream(accept.getOutputStream());
            objectOutputStream.writeObject(o1);
            System.out.println("回发成功");


        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //关闭socket
            try {
                if (null!= objectOutputStream){
                    objectOutputStream.close();
                }
                if (null != objectInputStream){
                    objectInputStream.close();
                }
                if (null != accept){
                    accept.close();

                }
                if (null != serverSocket){

                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


}
